#!c:/Python27/python.exe -u
# -*- coding: utf-8/IGNORE',$string);-*-
''' Tema - Linguagens de Programação Dinâmicas
Trabalho de Python á Discíplina - Linguagens de Programação

Graphs.py, tem como função efectuar gráficos estatistico  
Depois de efectuar a leitura dos dados, vindos da Banco de Dados, o objetivo do Graphs é  
efetuar uma interface gráfica neste caso gráficos simples e compostos representando assim as estatisticas dos dados pedidos. 
'''
__author__ = "Miguel Fialho, Nº 5958 - Pedro Serrano, Nº 3958"
__copyright__ = "Copyright 2014 - Miguel Fialho / Pedro Serrano"
__credits__ = ""
__license__ = "GPL"
__maintainer__ = "1.0"
__email__ = "mF200_5@hotmail.com"
__status__ = ""

'''Importações de bibliotecas e módulos para o desenvolvimento de funções aritméticas, gráficas, lógicas, entre outras...'''
from Tkinter import *
from Reports import*
import Reports
import tkMessageBox
import Tkinter
import os
import tkFileDialog
from pylab import*
from Statistics import*
from ReadFile import *
import ReadFile
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import time

def GraphIPC(self):
    '''
    Função responsável por criar o gráfico de Índice de Precos ao consumidor (IPC)
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Ipc_global = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Ipc_global.insert( i ,Statistics().getIpc_global(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Ipc_global], 'ro')
    plt.title("Indice de Precos ao consumidor (IPC)")
    plt.ylabel("Indice de Precos")
    plt.xlabel("Anos")
    plt.grid(True)
    plt.show()
    pass

def GraphInflation(self):
    '''
    Função responsável por criar o gráfico de Taxa de Inflação
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Inflacao = list()
    anos = list()
    for i in range (2, 38):
        if os.path.isfile("DataBase.db") == True:
            Inflacao.insert( i ,Statistics().getInflacao(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Inflacao], 'ro')
    plt.title("Taxa de Inflacao.:")
    plt.ylabel("Inflacao.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphMinimumRemuneration(self):
    '''
    Função responsável por criar o gráfico de Remuneração minima mensal dos funcionários públicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_minima = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_minima.insert( i ,Statistics().getRum_minima(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Rum_minima], 'ro')
    plt.title("Remuneracao minima mensal dos funcionarios publicos.:")
    plt.ylabel("Remuneracao Minima.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphMaximumRemuneration(self):
    '''
    Função responsável por criar o gráfico de Remuneração máxima mensal dos funcionários públicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_maxima = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_maxima.insert( i ,Statistics().getRum_maxima(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Rum_maxima], 'ro')
    plt.title("Remuneracao maxima mensal dos funcionarios publicos.:")
    plt.ylabel("Remuneracao Maxima.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphMinimumMaximumRemuneration(self):
    '''
    Função responsável por criar o gráfico de Remuneração Minima/Máxima mensal dos funcionários públicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_minima_Min = list()
    Rum_maxima_Max = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_minima_Min.insert( i ,Statistics().getRum_minima(i))
            Rum_maxima_Max.insert( i ,Statistics().getRum_maxima(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    figura = plt.figure()
    ax1 = figura.add_subplot(1,1,1, axisbg='gray')
    ax1.plot(anos,Rum_maxima_Max,'c', linewidth=3.3, linestyle='--', label='Remuneracao Maxima')
    ax1.plot(anos,Rum_minima_Min,'r', linewidth=3.3, linestyle='-', label='Remuneracao Minima')
    ax1.legend(loc='upper left')
    ax1.set_title("Remuneracao Minima e Maxima mensal dos funcionarios publicos a precos constantes.:")
    ax1.set_ylabel("Remuneracoes.:")
    ax1.set_xlabel("Anos.:")
    plt.show()
    pass

def GraphPIB(self):
    '''
    Função responsável por criar o gráfico de Produto Interno Bruto Anual (PIB) per capita
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Pib = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Pib.insert( i ,Statistics().getPib(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    ax=plt.subplot(111) 
    plt.plot([anos],[Pib], 'ro')
    line, = ax.plot(anos,Pib, lw=2)
    ax.annotate('Valor Maximo (PIB)', xy=(2010, 16354), xytext=(2004, 10000.3),arrowprops=dict(facecolor='black', shrink=0.05),)
    plt.title("Produto Interno Bruto Anual (PIB) per capita.:")
    plt.ylabel("Produto Interno Bruto.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphNationalRemuneration(self):
    '''
    Função responsável por criar o gráfico de Rendimento nacional anual bruto per capita
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rem_nac = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rem_nac.insert( i ,Statistics().getRem_nac(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Rem_nac], 'ro')
    plt.title("Rendimento nacional anual bruto per capita .:")
    plt.ylabel("Rendimento Nacional.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphDisposableRemuneration(self):
    '''
    Função responsável por criar o gráfico de Rendimento disponivel anual bruto per capita
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rem_disp = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rem_disp.insert( i ,Statistics().getRem_disp(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Rem_disp], 'ro')
    plt.title("Rendimento disponivel anual bruto per capita .:")
    plt.ylabel("Rendimento Disponivel.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphPerCapitaAnnualRemuneration(self):
    '''
    Função responsável por criar o gráfico de Remunerações per capita anuais
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Remu_capital = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Remu_capital.insert( i ,Statistics().getRemu_capital(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    plt.plot([anos],[Remu_capital], 'ro')
    plt.title("Remuneracoes per capita anuais .:")
    plt.ylabel("Remuneracoes.:")
    plt.xlabel("Anos.:")
    plt.grid(True)
    plt.show()
    pass

def GraphIpc3D(self):
    '''
    Função responsável por criar o gráfico 3D de Índice de Precos ao consumidor (IPC)
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Ipc_global = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Ipc_global.insert( i ,Statistics().getIpc_global(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    fig = plt.figure()
    ax = fig.add_subplot(111,projection='3d')
    X, Y,Z =[],[],[]
    X, Y,Z =[anos],[Ipc_global],[anos]
    ax.plot_wireframe(X,Y,Z)
    ax.set_xlabel('Anos')
    ax.set_ylabel('Indice de Precos')
    ax.set_zlabel('Anos')
    plt.show()
    pass

def GraphInflation3D(self):
    '''
    Função responsável por criar o gráfico 3D de Taxa de Inflação
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Inflacao = list()
    anos = list()
    for i in range (2, 38):
        if os.path.isfile("DataBase.db") == True:
            Inflacao.insert( i ,Statistics().getInflacao(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    fig = plt.figure()
    ax = fig.add_subplot(111,projection='3d')
    X, Y,Z =[],[],[]
    X, Y,Z =[anos],[Inflacao],[anos]
    ax.plot_wireframe(X,Y,Z)
    ax.set_xlabel('Anos')
    ax.set_ylabel('Taxa de Inflacao')
    ax.set_zlabel('Anos')
    plt.show()
    pass

def GraphMinimumRemuneration3D(self):
    '''
    Função responsável por criar o gráfico 3D de Remuneração minima mensal dos funcionários públicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_minima = list()
    anos = list()
    for i in range (2, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_minima.insert( i ,Statistics().getRum_minima(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    fig = plt.figure()
    ax = fig.add_subplot(111,projection='3d')
    X, Y,Z =[],[],[]
    X, Y,Z =[anos],[Rum_minima],[anos]
    ax.plot_wireframe(X,Y,Z)
    ax.set_xlabel('Anos')
    ax.set_ylabel('Remuneracao Minima')
    ax.set_zlabel('Anos')
    plt.show()
    pass

def GraphMaximumRemuneration3D(self):
    '''
    Função responsável por criar o gráfico 3D de Remuneração maxima mensal dos funcionários públicos
    '''
    AccoesBD.database = create_engine('sqlite:///DataBase.db', echo = False)
    AccoesBD.login = sessionmaker(bind=AccoesBD.database)
    AccoesBD.login.configure(bind=AccoesBD.database)
    AccoesBD.login = AccoesBD.login()
    Rum_maxima = list()
    anos = list()
    for i in range (1, 38):
        if os.path.isfile("DataBase.db") == True:
            Rum_maxima.insert( i ,Statistics().getRum_maxima(i))
            anos.insert( i ,Statistics().getAno(i))
            pass
        pass
    fig = plt.figure()
    ax = fig.add_subplot(111,projection='3d')
    X, Y,Z =[],[],[]
    X, Y,Z =[anos],[Rum_maxima],[anos]
    ax.plot_wireframe(X,Y,Z)
    ax.set_xlabel('Anos')
    ax.set_ylabel('Remuneracao Maxima')
    ax.set_zlabel('Anos')
    plt.show()
    pass